package com.oldbook.manage.service.impl;

import com.oldbook.common.utils.DateUtils;
import com.oldbook.manage.auto.SensitiveWordService;
import com.oldbook.manage.domain.PublishInfo;
import com.oldbook.manage.mapper.PublishInfoMapper;
import com.oldbook.manage.service.IPublishInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 学生发布书籍信息Service业务层处理
 * 
 * @author Exiaoke
 * @date 2025-02-18
 */
@Service
public class PublishInfoServiceImpl implements IPublishInfoService {
    @Resource
    private PublishInfoMapper publishInfoMapper;



    @Autowired
    private SensitiveWordService sensitiveWordService;

    /**
     * 根据主键查询单条书籍发布信息
     *
     * @param publishId 学生发布书籍信息主键，用于唯一标识一条记录
     * @return 返回对应publishId的完整书籍发布信息对象，包含所有字段数据
     */
    @Override
    public PublishInfo selectPublishInfoByPublishId(Long publishId) {
        return publishInfoMapper.selectPublishInfoByPublishId(publishId);
    }


    /**
     * 查询符合条件的书籍发布信息列表（支持条件过滤）
     *
     * @param publishInfo 包含查询条件的对象，各字段值作为过滤条件
     * @return 返回满足条件的书籍发布信息集合，若无匹配项返回空列表
     */
    @Override
    public List<PublishInfo> selectPublishInfoList(PublishInfo publishInfo) {

        return publishInfoMapper.selectPublishInfoList(publishInfo);
    }

    /**
     * 新增书籍发布信息记录
     *
     * @param publishInfo 包含完整书籍发布信息的对象
     * @return 返回操作影响的行数，1表示成功插入，0表示失败
     * <p>
     * 说明：自动设置记录的创建时间为当前系统时间
     */
    @Override
    public int insertPublishInfo(PublishInfo publishInfo) {
//合并所有敏感词
        String content = publishInfo.getBookName()+" "+publishInfo.getDescription()+" "+publishInfo.getContactInfo()+" "+publishInfo.getAuthor()+" "+publishInfo.getPublisher();
        //敏感词检测
        if (sensitiveWordService.containsSensitiveWord(content,publishInfo.getDescription(),publishInfo.getContactInfo(),publishInfo.getAuthor(),publishInfo.getPublisher())){
            publishInfo.setStatus("2");
            publishInfo.setRemarks("包含敏感词");
            publishInfoMapper.insertPublishInfo(publishInfo);
        }else {
            publishInfo.setCreateTime(DateUtils.getNowDate());
            publishInfo.setRemark("系统审核通过");
            publishInfo.setStatus("1");
        }
        return publishInfoMapper.insertPublishInfo(publishInfo);
    }







    /**
     * 修改已存在的书籍发布信息
     *
     * @param publishInfo 包含更新数据的对象，必须带有有效主键
     * @return 返回操作影响的行数，1表示成功更新，0表示失败
     *
     * 说明：自动设置记录的更新时间字段为当前系统时间
     */
    @Override
    public int updatePublishInfo(PublishInfo publishInfo)
    {
        // 设置更新时间后执行更新操作
        publishInfo.setUpdateTime(DateUtils.getNowDate());
        return publishInfoMapper.updatePublishInfo(publishInfo);
    }

    /**
     * 批量删除书籍发布信息记录
     *
     * @param publishIds 需要删除的记录主键数组
     * @return 返回操作影响的总行数，与数组长度一致表示全部删除成功
     */
    @Override
    public int deletePublishInfoByPublishIds(Long[] publishIds)
    {
        return publishInfoMapper.deletePublishInfoByPublishIds(publishIds);
    }

    /**
     * 查询过期未修改的书籍发布记录
     *
     * @return 返回超过修改期限仍未更新的书籍信息列表
     *
     * 注意：当前为方法框架，实际需实现具体过期判断逻辑
     */
//    @Override
//    public List<PublishInfo> selectExpiredUnmodified() {
//        return publishInfoMapper.selectPublishInfoList(new PublishInfo());
//    }



    /**
     * 查询待审核书籍信息
     *
     * @return
     */
    @Override
    public List<PublishInfo> selectPendingStudentInfos() {
        return publishInfoMapper.selectPendingStudentInfos( );
    }

    /**
     * 根据主键删除单条书籍发布信息
     *
     * @param publishId 需要删除的记录主键
     * @return 返回操作影响的行数，1表示成功删除，0表示记录不存在
     */
    @Override
    public int deletePublishInfoByPublishId(Long publishId)
    {
        return publishInfoMapper.deletePublishInfoByPublishId(publishId);
    }

}

